<?php
/**
 * Created by PhpStorm.
 * Author: Shadow
 * Date: 2022/6/1
 * Time: 3:56 下午
 * description: detail.php
 * 文章详情
 * 借助ob缓冲技术实现静态化
 *   ob_start() 开启缓冲区 ob_get_contents()获取缓冲区的内容 file_put_contents()向文件中写入内容 file_get_contents() 获取文件的内容 file_exists() 判断文件是否存在 fielctime() 获取文件生成时间
 * 第一次访问的时候、会生一个静态页面
 * 第二次访问的时候、我只需判断静态页面是否存在、如果存在、不需要查询数据 缓解数据库的压力
 * 没有使用静态化的时候 直接查询数据库 每次进来的时候、都查询数据
 *
 * 当我数据库中的数据、更新的时候、我静态文件没有更新怎么解决啊？
 * 静态文件生成、是不是有个创建时间、获取文件的创建时间 （给静态文件加过期时间）
 * 静态文件超过5分以后、重新生成 16：32 分生成的静态文件  16：37 重新生成
 */

$id = $_GET['id'];
$filename = $id.'.html';// 静态文件名
if (file_exists($filename)) {
    # 获取静态文件的生成时间 生成时间和当前时间、进行对比
    $filetime = filectime($filename);
    if (time() - $filetime < 300) { // 静态文件是在5分钟以内 都可以使用、超过5分钟、重新生成
        echo "走的静态文件";
        echo file_get_contents($filename);
        die();
    }
}
echo "走的数据库";
try {
    $pdo = new PDO("mysql:host=127.0.0.1;dbname=2004a",'root','password');
    # 查询数据
    $sql = "SELECT * FROM article WHERE id={$id}";
    $result = $pdo->query($sql);
    // fetch() 获取结果集中的一条记录 fetchAll() 获取结果集中的所有数据
    $data = $result->fetch(PDO::FETCH_ASSOC);//获取结果集中的所有 PDO::FETCH_ASSOC 以关联数组的形式、返回
//    print_r($data);
}catch (PDOException $exception) {
    echo  "错误信息";
    print_r($exception->getMessage());
}
# 借助ob机制生成静态页面
//开启缓冲区
ob_start();
?>
    <meta charset="UTF-8">
<h3>文章详情</h3>
<p>标题：<?php echo $data['title']?> <span>发布时间：<?php echo date("Y-m-d H:i:s",$data['create_time'])?></span></p>
<p>详情<?php echo $data['content'];?></p>

<?php
# 生成静态页面

# 获取缓冲区的内容
$content = ob_get_contents();// 获取缓冲区的

# 将获取到的内容、写入到静态文件中
file_put_contents($filename,$content);

?>